package eval.engine;

/**
 * Represents the interface for any placement engine
 * 
 * @author Nicola Calcavecchia <calcavecchia@elet.polimi.it>
 * @author Amit Peled   <amit.kapina@gmail.com>
 * @author Igal Kaufman <igal.kaufman@gmail.com>  
 * */
public interface IPlacementEngine {

	/**
	 * Returns the time employed by the engine to compute the placement in
	 * seconds.
	 * 
	 * @return the time 
	 */
	double getEngineTimeInSec();

	/**
	 * Resets the time employed to compute the placement.
	 * 
	 */
	void resetEngineTime();


	/**
	 * This is the entry point of placement calculation.
	 * 
	 * @param tick the cycle of experiment  
	 * @param lastPlacement placement of last tick
	 * @return the new placement
	 */
	IPlacement computePlacement(int tick, IPlacement lastPlacement);

}
